// Package convert 提供了一组转换函数，用于将uint64类型的值转换为其他类型。
package convert

import (
	"errors"
	"math"
	"strconv"
	"unsafe"
)

// Uint64ToInt 将uint64类型的值转换为int类型，如果超出int范围则返回错误。
func Uint64ToInt(value uint64) (int, error) {
	if value > math.MaxInt {
		return 0, errors.New("overflow occurred during conversion")
	}
	return int(value), nil
}

// Uint64ToInt8 将uint64类型的值转换为int8类型，如果超出int8范围则返回错误。
func Uint64ToInt8(value uint64) (int8, error) {
	if value > math.MaxInt8 {
		return 0, errors.New("overflow occurred during conversion")
	}
	return int8(value), nil
}

// Uint64ToInt16 将uint64类型的值转换为int16类型，如果超出int16范围则返回错误。
func Uint64ToInt16(value uint64) (int16, error) {
	if value > math.MaxInt16 {
		return 0, errors.New("overflow occurred during conversion")
	}
	return int16(value), nil
}

// Uint64ToInt32 将uint64类型的值转换为int32类型，如果超出int32范围则返回错误。
func Uint64ToInt32(value uint64) (int32, error) {
	if value > math.MaxInt32 {
		return 0, errors.New("overflow occurred during conversion")
	}
	return int32(value), nil
}

// Uint64ToInt64 将uint64类型的值转换为int64类型，如果超出int64范围则返回错误。
func Uint64ToInt64(value uint64) (int64, error) {
	if value > math.MaxInt64 {
		return 0, errors.New("overflow occurred during conversion")
	}
	return int64(value), nil
}

// Uint64ToUint 将uint64类型的值转换为uint类型，如果超出uint范围则返回错误。
func Uint64ToUint(value uint64) (uint, error) {
	if unsafe.Sizeof(uint(0)) == 4 && value > math.MaxUint32 {
		return 0, errors.New("overflow occurred during conversion")
	}
	return uint(value), nil
}

// Uint64ToUint8 将uint64类型的值转换为uint8类型，如果超出uint8范围则返回错误。
func Uint64ToUint8(value uint64) (uint8, error) {
	if value > math.MaxUint8 {
		return 0, errors.New("overflow occurred during conversion")
	}
	return uint8(value), nil
}

// Uint64ToUint16 将uint64类型的值转换为uint16类型，如果超出uint16范围则返回错误。
func Uint64ToUint16(value uint64) (uint16, error) {
	if value > math.MaxUint16 {
		return 0, errors.New("overflow occurred during conversion")
	}
	return uint16(value), nil
}

// Uint64ToUint32 将uint64类型的值转换为uint32类型，如果超出uint32范围则返回错误。
func Uint64ToUint32(value uint64) (uint32, error) {
	if value > math.MaxUint32 {
		return 0, errors.New("overflow occurred during conversion")
	}
	return uint32(value), nil
}

// Uint64ToFloat32 将uint64类型的值转换为float32类型，不进行溢出检查。
func Uint64ToFloat32(value uint64) (float32, error) {
	return float32(value), nil
}

// Uint64ToFloat64 将uint64类型的值转换为float64类型，不进行溢出检查。
func Uint64ToFloat64(value uint64) (float64, error) {
	return float64(value), nil
}

// Uint64ToString 将uint64类型的值转换为字符串类型。
func Uint64ToString(value uint64) string {
	return strconv.FormatUint(value, 10)
}

// Uint64ToBool 将uint64类型的值转换为bool类型，非零值转换为true，零值转换为false。
func Uint64ToBool(value uint64) bool {
	return value != 0
}
